| CLOSE(2) | Linux Programmer's Manual | CLOSE(2) |
名前¶
close - ファイルディスクリプタをクローズする
書式¶
#include <unistd.h> int close(int fd);
説明¶
close() は、ファイルディスクリプタをクローズする。 そのディスクリプタは、どのファイルも参照していない状態になり、 再利用が可能になる。 そのファイルディスクリプタに関連づけられたファイルに かけられたレコード・ロック (fcntl(2) 参照) のうち、そのプロセスが保有しているものは、 (そのファイルディスクリプタがロック取得に利用されたか どうかによらず) すべて削除される。
fd が、対応するオープンファイル記述 (open file description) (open(2) 参照) を参照する最後のファイルディスクリプタだった場合、 オープンファイル記述に関連するリソースが解放される。 そのディスクリプタが、 unlink を使用して削除 (remove) されたファイルに対する最後の参照だった場合には、 そのファイルは削除 (delete) される。
返り値¶
close() は成功した場合は 0 を返す。 エラーが発生した場合は -1 を返して、 errno を適切に設定する。
エラー¶
準拠¶
SVr4, 4.3BSD, POSIX.1-2001.
注意¶
close() の返り値のチェックはよく省略されるが、 これは深刻なプログラミングエラーである。 前の write(2) 処理に関するエラーが最後の close() のときになって初めて通知される場合がありうる。 ファイルクローズの際に返り値をチェックしないと、 気付かないうちにデータを失ってしまうかもしれない。 これは特に NFS やディスク・クォータを使用した場合に見られる。
クローズに成功しても、データがディスクに保存されたかどうかは 保証されない (カーネルが書きこみを遅延させることがあるためである)。 ストリームがクローズされるときにバッファをフラッシュするかどうかは、 ファイルシステムによって異なる。 データが物理的に保存されることを保証する必要がある場合には、 fsync(2) を使用すること (fsync(3) を行った時点で、データの保存はディスクのハードウェアに依存する 問題となる)。
同じプロセス内の他のスレッドのシステムコールが使用している可能性がある間に、 ファイルディスクリプタをクローズするのは、おそらく賢明ではないだろう。 ファイルディスクリプタは再利用されるかもしれないので、 あいまいな競合条件となることがあり、意図しない副作用の原因となりうる。
関連項目¶
fcntl(2), fsync(2), open(2), shutdown(2), unlink(2), fclose(3)
| 2007-12-28 | Linux |